			LIST	P=16F877A  					; Indica el modelo de PIC que se usa
			RADIX	HEX		
			INCLUDE	<P16F877A.INC> 


sumando		equ	0x0D   							; Define posicion de puerto1
puerto2		equ	0x0E  							; Define posicion de puerto2
conta		equ	0x0C  							; Define posicion de contador
resultado   equ 0x10                    		; Define posicion de resultado
												; (variable almacena resultados) 

reset		ORG	0      							; Comando que indica al Ensamblador
                       							; la direccion de la memoria de programa
                       							; donde situar  la siguiente instruccion

			goto	INICIO						; Va a la primera instruccion del programa

			ORG	5								; Salta el vector de interrupcion

INICIO		movlw 	b'00000000'					; Asignamos un 0 (cero) a W
			movwf   resultado 					; Asignamos el valor de W a resultado
			bsf		STATUS,RP0 					; Cambio al banco de memoria 1
			bcf		STATUS,RP1
			clrf	TRISD						; Puerto D como salida
			movlw	b'11111111'					; Asignamos todos los pines de salida
			movwf	TRISD						; Asignamoa los valores

			clrf	TRISC						; Puerto C como entrada/salida
			movlw	b'00000000'					; Pin 25 salida, Ping 24 entrada?
			movwf	TRISC						; Asignamos los valores
			
			clrf	TRISB						; Puerto B como entrada/salida
			movlw	b'10000000'					; Pin 33 como entrada, el resto salida
			movwf	TRISB						; Asignamos valores
			
BUCLE		movf	PORTB,W						; Se carga el valor de puerto B en registro W
			btfss	STATUS,Z					; Comprobacion de Z=1
			goto	SUMA						; Si RB0-RB1 no son 0 (cero)
			clrf	PORTB						; Borrado de lineas no usadas de puerto B	
			bsf		STATUS,RP0 					; Cambio al banco de memoria 1
			bcf		STATUS,RP1
			movwf	TRISC						; RB0-RB1 como entradas
			bcf		STATUS,RP0					; Cambio a banco 0
			movf	PORTC,W						; Se carga el valor de puerto C en registro W
			btfss	STATUS,Z					; Comprobacion de Z=1
			goto	SUMA						; Si RB0-RB1 no son 0 (cero)
			clrf	PORTC						; Borrado de lineas no usadas de puerto C	
			goto 	BUCLE						; Vuelve a verificar 
			
SUMA       	movlw 	b'00000001'					; Asignamos un uno a W
			movwf   sumando						; Asignamos 1 a sumando
			movlw	resultado					; Asignamos el valor de resultado a W
           	addwf   sumando,0  					; El valor de W + sumando y lo almacenamos en W
           	movwf   resultado 					; Almacena el resultado
			movwf	PORTB						; Muestra Valores
			movwf	PORTD
 			movwf	PORTC						; Manda al puero TX
			goto	BUCLE						; Vuelve a verificar

			END